import $ from 'jquery';

/*
    @结构
        1. 常量
        2. 辅助函数
        3. 导出函数
*/
/*-- 1. 常量 --*/
/*1. DEFAULT_ORIGINAL_WIDTH  -  原始设计稿宽&高*/
const DEFAULT_ORIGINAL_WIDTH = 1920;
const DEFAULT_ORIGINAL_HEIGHT = 1080;
/*2. DEFAULT_FONT_SIZE  -  默认字体大小[不能随意更改,和样式表同步]*/
const DEFAULT_FONT_SIZE = 100;
/*3. ZOOM_SCALE  -  缩放比例*/
let ZOOM_SCALE = 1;
/*4. THROTTLE_TIME  -  节流最短时间间隔[毫秒]*/
let THROTTLE_TIME = 300;

/*-- 2. 辅助函数 --*/
/**
 * @note 获取视口对象
 * @return {Object}
 * */
function getViewPort(){
    /*
        @note 获取视口对象
    */
    if(document.compatMode == 'CSS1Compat'){
        return{
            width: document.documentElement.clientWidth,
            height: document.documentElement.clientHeight
        }
    }else{
        return{
            width: document.body.clientWidth,
            height: document.body.clientHeight
        }
    }
}

/**
 * @note 根据视口宽度与设计稿宽度的比例设置字体
 * @param {Number} originalWidth [ 设计稿的宽度,默认为 1920 PC 的尺寸 ]
 * */
function fontSizeCalc(originalWidth){
    let viewPort=getViewPort();
    if(typeof originalWidth == 'undefined'){
        ZOOM_SCALE = (viewPort.width/DEFAULT_ORIGINAL_WIDTH);
    }else{
        ZOOM_SCALE = (viewPort.width/originalWidth);
    }
    document.documentElement.style.fontSize = DEFAULT_FONT_SIZE * ZOOM_SCALE + 'px';
    document.body.style.fontSize = DEFAULT_FONT_SIZE * ZOOM_SCALE + 'px';
    $('body').removeAttr('cloak');
}
/**
 * @note 根据视口高度与 body 的高度比例设置 body 元素的缩放比例
 * */
function fullScreen(){
    let viewPort = getViewPort(),
        scale = viewPort.height / document.body.clientHeight;
    document.body.style.webkitTransform = 'scaleY('+scale+')';
    document.body.style.mozTransform = 'scaleY('+scale+')';
    document.body.style.msTransform = 'scaleY('+scale+')';
    document.body.style.oTransform = 'scaleY('+scale+')';
    document.body.style.webkitTransformOrigin = '50% 0';
    document.body.style.mozTransformOrigin = '50% 0';
    document.body.style.msTransformOrigin = '50% 0';
    document.body.style.oTransformOrigin = '50% 0';
}

/**
 * @note 节流函数
 * param {Function} method [ 需要被节流函数 ]
 * param {Object} context [ 函数的执行环境绑定 ]
 * */
function throttle(method,context){
    let arg=Array.prototype.slice.call(arguments,2);
    clearTimeout(method.tId);
    method.tId = setTimeout(function(){
        method.apply(context,arg);
    },THROTTLE_TIME);
}

/**
 * @note 设置字体
 * */
export function setFont(originalWidth){
    //初始化调用一次
    fontSizeCalc(originalWidth);
    //给 window 对象绑定 resize 事件
    $(window).bind('resize.setFont',function(){
        throttle(fontSizeCalc,null,originalWidth);          
    });
}

/**
 * @note 解除设置字体函数
 * */
export function destorySetFont(){
    $(window).unbind('resize.setFont');
}

/**
 * @note 缩放设置
 * */
export function setFullScreen(){
    fullScreen();
    $(window).bind('resize.setFullScreen',function(){
        throttle(fullScreen,null);         
    });
}

/**
 * @note 解除设置字体函数
 * */
export function destorysetFullScreen(){
    $(window).unbind('resize.setFullScreen');
}
